package com.hygj.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @author hygl
 * 图片文件上传工具包
 */
public class ImageUtil {

   private static Logger logger = LoggerFactory.getLogger(ImageUtil.class);

    /**
     *
     * @param multipartFile
     * @param session
     * @return
     * @throws IllegalStateException
     * @throws IOException
     */
    public String ImageUpload(MultipartFile multipartFile,  HttpSession session)
            throws IllegalStateException, IOException {

        // 判断上传的文件是否为空
        if (multipartFile != null) {
            // 文件类型
            String fileType = "";
            // 获取文件原名称
            String sourceName = multipartFile.getOriginalFilename();
            //后缀：从字符串中提取一些字符,以点“.”之后为起点，+1就是去掉点
            String suffix = sourceName.substring(sourceName.lastIndexOf(".") + 1);
            //生成随机的UUID+"."+后缀     拼接
            String newFileName = UUID.randomUUID().toString() + "." + suffix;
            //自定义文件路径
            String newFilePath = "/hylg/";
            logger.debug("新文件路径{}{}", newFilePath, newFileName);

            //获取文件类型
            fileType = multipartFile.getContentType();
            //【toUpperCase】返回值 转换成字符的大写形式  【toLowerCase】：把字符串转换成小写  【contains】：包含
            if (fileType.toLowerCase().contains("image")) {
                //根路径
                String rootDir = session.getServletContext().getRealPath("/");

                File fileLocalSave = new File(rootDir +  newFilePath);
                logger.debug("拼接{}",fileLocalSave);
                //【 .isDirectory()】:判断当前对象是否是一个文件夹
                //【.exists()】:判断当前文件对象是否在磁盘中存在
                if(!fileLocalSave.exists() || !fileLocalSave.isDirectory()){
                    boolean m = fileLocalSave.mkdirs();
                }

                File fileNewSave = new File(rootDir +  newFilePath + newFileName);
                // 将上传文件写到服务器上指定的文件。转存文件到指定的路径
                multipartFile.transferTo(fileNewSave);


                return newFilePath + newFileName;
            } else {
                System.out.println("不是我们想要的文件类型,请按要求重新上传");
                return "";
            }

        } else {
            System.out.println("没有找到相对应的文件");
        }

        return "";
    }
}
